﻿#ifndef __DAHUA_GENICAM_IUSBINTERFACE_H__
#define __DAHUA_GENICAM_IUSBINTERFACE_H__

#include "GenICam/Defs.h"
#include "GenICam/Camera.h"
#include "Infra/String.h"
#include "Memory/SharedPtr.h"

GENICAM_NAMESPACE_BEGIN

class IUsbInterface;
typedef Memory::TSharedPtr<IUsbInterface> IUsbInterfacePtr;

/// \~chinese
/// \brief 鐩告満鎺ュ彛绫?
/// \defgroup IUsbInterface  杩炴帴Usb鐩告満镄勬帴鍙ｇ被
/// \~english
/// \brief camera interface class
/// \defgroup IUsbInterface API for U3V interface Only
/// @{

/// \~chinese
/// \brief Class IUsbInterface 杩炴帴Usb鐩告満镄勬帴鍙ｇ被
/// \~english
/// \brief Class IUsbInterface interface class used to connect Usb Camera 
class GENICAM_API IUsbInterface
{
protected:
    virtual ~IUsbInterface(){}

public:
    /// \~chinese
    /// \brief 杩炴帴Usb鐩告満鎺ュ彛瀵硅薄銮峰彇鍑芥暟锛屽悓涓€涓猚ameraPtr瀵瑰簲镄勬槸鍚屼竴涓帴鍙ｅ璞?
    /// \param [in] cameraPtr  Usb鐩告満鏅鸿兘鎸囬拡瀵硅薄
    /// \~english
    /// \brief Usb camera object access interface, same cameraPtr is correspond to same Usb camera object
    /// \param [in] cameraPtr Usb camera smart pointer object
    static IUsbInterfacePtr getInstance(const ICameraPtr &cameraPtr);

    /// \~chinese
    /// \brief  銮峰彇鎺ュ彛鎻忚堪淇℃伅
    /// \return 杩斿洖鎺ュ彛鎻忚堪淇℃伅锛屽け璐ヨ繑锲濶ULL
    /// \~english
    /// \brief get interface description information
    /// \return success:return interface description information, fail:return NULL
    virtual const char * getDescription() = 0;

    /// \~chinese
    /// \brief  銮峰彇鎺ュ彛镄刅endor ID
    /// \return 杩斿洖鎺ュ彛镄刅endor ID锛屽け璐ヨ繑锲濶ULL
    /// \~english
    /// \brief get interface's Vendor ID
    /// \return success:return interface's Vendor ID, fail:return NULL
    virtual const char * getVendorID() = 0;

    /// \~chinese
    /// \brief  銮峰彇鎺ュ彛镄凞evice ID
    /// \return 杩斿洖鎺ュ彛镄凞evice ID锛屽け璐ヨ繑锲濶ULL
    /// \~english
    /// \brief get interface's Device ID
    /// \return success:return interface's Device ID, fail:return NULL
    virtual const char * getDeviceID() = 0;

    /// \~chinese
    /// \brief 銮峰彇鎺ュ彛镄凷ubsystem ID
    /// \return 杩斿洖鎺ュ彛镄凷ubsystem ID锛屽け璐ヨ繑锲濶ULL
    /// \~english
    /// \brief get interface's Subsystem ID
    /// \return success:return interface's Subsystem ID, fail:return NULL
    virtual const char * getSubsystemID() = 0;

    /// \~chinese
    /// \brief  銮峰彇鎺ュ彛镄凴evision
    /// \return 杩斿洖鎺ュ彛镄凴evision锛屽け璐ヨ繑锲濶ULL
    /// \~english
    /// \brief get interface's Revision
    /// \return success:return interface's Revision, fail:return NULL
    virtual const char * getRevision() = 0;

    /// \~chinese
    /// \brief  銮峰彇鎺ュ彛镄凷peed
    /// \return 杩斿洖鎺ュ彛镄凷peed锛屽け璐ヨ繑锲濶ULL
    /// \~english
    /// \brief get interface's Speed
    /// \return success:return interface's Speed, fail:return NULL
    virtual const char * getSpeed() = 0;
};

/// @}

GENICAM_NAMESPACE_END

#endif//__DAHUA_GENICAM_IUSBINTERFACE_H__